package activiti;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;

/**
 * @Author: 蔡翔
 * @Date: 2019/9/2 9:10
 * @Version 1.0
 *
 * 启动流程实例：
 *      前提是先已经完成流程定义的部署工作
 *
 *      背后影响的表：
 *          act_hi_actinst  里面有执行每一步的记录，如果end time为null 就代表这步没执行完       （已完成的活动信息）
 *          act_hi_identitylink 这张表 表示这个流程有哪些参加者。（参与者信息）
 *          act_hi_procinst 流程的实例                        （流程实例）
 *          act_hi_taskinst 任务实例，显示谁要去执行。           （任务实例）
 *          act_ru_execution 运行执行实例                     （执行表）
 *          act_ru_identitylink 上面记录着 当前要去干活的人。
 *          act_ru_task 这个表记录表示当前是哪个记录，比如说这个任务 当前是需要zhangsan 来处理的。
 */
public class ActivitiStartInstance {
    public static void main(String[] args) {
        // 1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.得到RunService对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //3.创建流程实例 流程定义的key需要知道 holiday ，指需要知道那个bpmn  (下面这行就是启动一个新的流程了)
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
        /**
         * 注意这里的流程key是我们业务系统 的 流程注解，这样就把业务系统和 activiti系统关联起来了。
         *ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday",businessKey);
         **/

        //4.输出实例的相关信息
        System.out.println("流程部署ID"+processInstance.getDeploymentId());         //null
        System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());  //holiday:1:4
        System.out.println("流程实例ID"+processInstance.getId());                   //2501
        System.out.println("流程部署ID"+processInstance.getActivityId());           //null
    }
}
